package es.deusto.herotactics;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.ImageView.ScaleType;

/**
 * Activity que lanza el menu princial de la aplicacion.
 * 
 * AVISO: para que funcione hay que descomprimir el herotactics.zip en la raíz
 * de la memoria externa del movil
 * 
 * @author Ibai
 *
 */
public class PantallaInicial extends Activity {

	private Button bIniciar;
	private Button bSalir;
	
	private LinearLayout lPrincipal;
	private LinearLayout lGame;
	
	private static final int MAX_JUGADORES = 2;
	private String[] jugadores = new String[MAX_JUGADORES];
	

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
				WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
		this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		setContentView(R.layout.pantalla_inicial);

		LinearLayout lTitulo = (LinearLayout) findViewById(R.id.lTitulo);
		ImageView titulo = new ImageView(this);
		titulo.setImageResource(R.drawable.titulo);
		titulo.setScaleType(ScaleType.FIT_XY);
		lTitulo.addView(titulo, LayoutParams.FILL_PARENT, (int) ((int) lTitulo.getWidth()/(217.0/295.0)));        

		lPrincipal = (LinearLayout) findViewById(R.id.principal);
		lPrincipal.setVisibility(View.VISIBLE);
		lGame = (LinearLayout) findViewById(R.id.game_menu);
		lGame.setVisibility(View.GONE);
		
		bIniciar = (Button) findViewById(R.id.iniciar);
		bSalir = (Button) findViewById(R.id.salir);

		bIniciar.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				lPrincipal = (LinearLayout) findViewById(R.id.principal);
				lPrincipal.setVisibility(View.GONE);
				lGame = (LinearLayout) findViewById(R.id.game_menu);
				lGame.setVisibility(View.VISIBLE);
				Button bNueva = (Button) findViewById(R.id.bNueva);

				bNueva.setOnClickListener(new OnClickListener() {

					@Override
					public void onClick(View v) {
						crearJugador();
					}
				});

				Button bCargar = (Button) findViewById(R.id.bCargar);
				bCargar.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View v) {
						Intent i = new Intent(v.getContext(), InGame.class);
						i.putExtra("cargarPartida", true);
						startActivity(i);
					}
				});
			}
		});

		bSalir.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {

				Activity a = (Activity) v.getContext();
				a.finish();
			}
		});
	}
	
	private EditText nombreJugador;
	private int numeroJugador = 1;
	
	/**
	 * Lanza una alerta para crear un jugador y luego otra para crear otro jugador
	 */
	private void crearJugador() {
		nombreJugador = new EditText(this);
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage("Introduzca el nombre del jugador "+numeroJugador)
		.setCancelable(false)
		.setPositiveButton("Continuar", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {
				if (nombreJugador.getText().toString().trim().length() > 0
						&& (numeroJugador < 2 || (numeroJugador >= 2 && !nombreJugador.getText().toString().equals(jugadores[numeroJugador-2])))) {
					jugadores[numeroJugador-1] = nombreJugador.getText().toString();
					if (numeroJugador >= MAX_JUGADORES) {
						numeroJugador = 1;
						Intent i = new Intent(PantallaInicial.this, InGame.class);
						i.putExtra("cargarPartida", false);
						i.putExtra("jugadores", jugadores);
						startActivity(i);
					} else {
						numeroJugador++;
						crearJugador();
					}
				} else {
					numeroJugador = 1;
					Toast.makeText(PantallaInicial.this, "Nombre de jugador no válido", Toast.LENGTH_LONG).show();
					dialog.cancel();
				}
			}
		})
		.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int id) {
				numeroJugador = 1;
				dialog.cancel();
			}

		}).setView(nombreJugador);
		AlertDialog alert = builder.create();
		alert.show();
	}

	/** Anula la pulsación de las teclas menu y atrás */
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		return false;
	}
	
	/** Gestiona la pulsación de tecla atrás para retroceder en las pantallas o salir de la aplicación */
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event)
	{
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			if (lGame.getVisibility() == View.VISIBLE) {
				lGame.setVisibility(View.GONE);
				lPrincipal.setVisibility(View.VISIBLE);
			} else if (lPrincipal.getVisibility() == View.VISIBLE) {
				this.finish();
			}
		}
		return false;
	}
}